Algoritmo de Zeller

Descrição

Neste problema, você implementará o algoritmo de Zeller, que calcula o dia da semana em que uma determinada data caiu (ou cairá).

As três primeiras linhas de seu programa devem configurar variáveis para conter o ano, mês e dia em questão (chame-os de year, month e day). Portanto, as três primeiras linhas do seu programa devem ser semelhantes a, por exemplo:

year = 2017
month = 1  # 1 = janeiro, 2 = fevereiro, ..., 12 = dezembro
day = 9

Em notação matemática, vamos chamá-los de $y$, $m$ e $d$.

O algoritmo de Zeller também requer o uso de alguns outros valores. Em notação matemática:

  • Se $m\in \{1,2\}$, então $y_1 = y-1$ e $m_1 = m + 12$
  • Se $m\notin \{1,2\}$, então $y_1=y$ e $m_1=m$
  • $y_2$ é o ano do século (os últimos dois dígitos do ano), $y_1 \mod 100$
  • $c$ é o século (dois primeiros dígitos do ano), $\lfloor y_1/100\rfloor$

Com essas definições, o dia da semana em que cai a data fornecida ($w$) é dado pelo seguinte: $$w=\left(d+\left\lfloor\frac{13(m_1+1)}{5}\right\rfloor+y_2+\left\lfloor\frac{y_2}{4}\right\rfloor+\left\lfloor\frac{c}{4}\right\rfloor-2c\right)\mod 7$$ onde $w=0$ corresponde a um sábado, $1$ a um domingo, ... e $6$ a uma sexta-feira. Observe que os símbolos $\lfloor$ e $\rfloor$ na equação matemática acima denotam o operador "floor" (divisão inteira); eles não devem ser confundidos com colchetes em Python.

Seu programa deve implementar o algoritmo de Zeller e deve ligar à variável out um único número $w$ para a data fornecida (especificado pelas variáveis year, month e day).

Notas

  • A página da Wikipedia para o algoritmo de Zeller explica cada um dos termos da soma.
  • É uma boa ideia usar mais variáveis para armazenar os valores intermediários acima (e, talvez, adicionalmente, uma para cada termo da soma no resultado final).
  • Lembre-se de que converter de float para int trunca, portanto, para números positivos, isso é equivalente ao operador floor ($\lfloor\rfloor$).
  • Python não é exigente com nomes de variáveis, mas nosso verificador é. É importante que você chame as quatro variáveis mencionadas acima de year, month, day e out, em vez de dar-lhes outros nomes. Variáveis diferentes dessas quatro podem ser chamadas de onde você quiser.

Testando

É uma boa ideia experimentar a data de hoje como ponto de partida. Se essa for a resposta certa, tente os exemplos da página da Wikipedia ou de seu aniversário. Experimente primeiro à mão e, em seguida, executando Python. Se tudo sair correto, você pode estar pronto!

Submissão

Quando estiver pronto (depois de ter simulado manualmente e estiver convencido de que seu programa fará a coisa certa), faça upload do seu arquivo Python no Problema 0.4 no Gradescope. Lembre de nomear seu arquivo p0_4.py.